
// 定义一个弹出框
// 分为3种状态 success warning error
// time 显示时间
let message_timer = null
function Message(text, type = 'success', time = 3000) {
    let arr = ['#F0F9EB', '#FDF6EC', '#FEF0F0']
    let arr1 = ['#67C241', '#E6A23C', '#F56C6C']
    let arr2 = ['icon-success', 'icon-warning', 'icon-error_3']
    let bckColor = ''  // 背景色
    let textColor = ''    // 文字颜色
    let iconVal = ''       // 字体图标 iconfont
    switch (type) {
        case 'success':
            bckColor = arr[0];
            textColor = arr1[0];
            iconVal = arr2[0];
            break
        case 'warning':
            bckColor = arr[1];
            textColor = arr1[1];
            iconVal = arr2[1];
            break
        case 'error':
            bckColor = arr[2];
            textColor = arr1[2];
            iconVal = arr2[2];
            break
    }

    let ele = `
        <div class="status_message" style="color: ${textColor};  background-color: ${bckColor};">
        <div class="messsge_i_cover">
         <i class="iconfont ${iconVal}"></i>
        </div>
         <p>
             ${text}
         </p>
     </div>`

    $("body").append(ele)

    clearTimeout(message_timer)
    message_timer = setTimeout(() => {
        $(".status_message").hide()
    }, time)
}


// 收集上传头像的函数
// 参数 
// 1. 被点击的节点 class
// 2. 需要隐藏的节点 class 如果不需要,传入 null
// 3. 图片要放置的父节点 class 如果不需要,传入 null
// 4. 是否需要添加预览图  默认需要

function collectImg(ele1, ele2, ele3, pre = true) {
    return new Promise((res, rej) => {     // 这儿必须要加这个异步
        var v = $(ele1).val();
        var reader = new FileReader();
        reader.readAsDataURL($(ele1)[0].files[0]);

        // 获取原来文件名
        let oldfilename = $(ele1)[0].files[0].name || ''
        strs = v.split('.');
        var suffix = strs[strs.length - 1];

        // 判断文件格式
        if (suffix != 'jpg' && suffix != 'gif' && suffix != 'jpeg' && suffix != 'png') {
            Message("你选择的不是图片,请选择图片！", 'error');
            var obj = document.getElementById('fileup');
            obj.outerHTML = obj.outerHTML; //这样清空，在IE8下也能执行成功
            return false
        }
        // 判断文件的大小 小于2M

        if ($(ele1)[0].files[0].size / 1000 > 2 * 1024) {
            Message("上传文件不能大于2M", 'error')
            return false
        }

        reader.onload = function (e) {
            if (pre) {
                if (ele2 !== null) {
                    $(ele2).hide()
                }

                $(ele3).empty();
                let img1 = `
                    <img class="userheader" src="${e.target.result}" alt="">`
                $(ele3).append(img1)
            }

            // res({
            //     imgdata:e.target.result,
            //     oldfilename
            // })
            res(e.target.result)
        };

    })
}


// 用于收集form 表单数据 将其转化为对象
// 第二个参数 是否全部必填 默认false
function formToJson(ele, isAll = false) {

    let data = $(ele).serializeArray()
    let newdata = {}
    data.forEach(item => {
        newdata[item.name] = item.value
    })
    if (isAll) {
        for (item in newdata) {
            if (!newdata[item]) {
                Message("所有项都是必填项", "error")
                return null
            }
        }
    }


    return newdata
}


// 专门用于 检查手机号是否合法
function checkPhone(register_user_phone) {
    let pattern = /^1[3456789]\d{9}$/;
    if (!pattern.test(register_user_phone)) {
        Message("请检查你的手机号是否合法", 'error')
        return false
    } else {
        return true
    }
}

// 判断身份证是否符合
function checkUserId(USER_ID) {
    var idcardReg =
        /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X)$/;
    return idcardReg.test(USER_ID)

}

// p判断邮箱是否合法
function checkEmail(USER_EMAIL) {
    var idcardReg = /^([a-zA-Z]|[0-9])(\w|\-)+@[a-zA-Z0-9]+\.([a-zA-Z]{2,4})$/;
    return idcardReg.test(USER_EMAIL)
}

// 专门用于生成一个无限级列表
// 先定义一个arr

let templateData = [
    {
        name: "资质分类",
        id: 0000,
        type: 0,
        children: [
            {
                name: "铁路工程",
                id: 0010,
                type: 1,
                children: [
                    {
                        name: "四川",
                        id: 0100,
                        type: 2,
                        children: [
                            {
                                name: "成都",
                                id: 1000,
                                type: 3,
                            },
                            {
                                name: "南充",
                                id: 2000,
                                type: 3,
                            }
                        ]
                    },
                    {
                        name: "北京",
                        id: 0200,
                        type: 2,
                        children: [
                            {
                                name: "长阳区",
                                id: 2000,
                                type: 3,
                            },
                            {
                                name: "花式区",
                                id: 3000,
                                type: 3,
                            }
                        ]
                    }
                ]
            },
            {
                name: "公路工程",
                id: 0010,
                type: 1,
                children: [
                    {
                        name: "四川",
                        id: 0100,
                        children: [
                            {
                                name: "成都",
                                id: 1000,
                            },
                            {
                                name: "南充",
                                id: 2000,
                            }
                        ]
                    },
                    {
                        name: "北京",
                        id: 0200,
                    }
                ]
            }
        ]
    },
    {
        name: "施工劳务",
        id: 0001,
        type: 0,
        children: [
            {
                name: "四川",
                id: 0100,
                type: 1,
                children: [
                    {
                        name: "成都",
                        id: 1000,
                        type: 2,
                    },
                    {
                        name: "南充",
                        id: 2000,
                        type: 2,
                    }
                ]
            },
            {
                name: "北京",
                id: 0200,
                type: 1,
                children: [
                    {
                        name: "长阳区",
                        id: 2000,
                        type: 2,
                    },
                    {
                        name: "花式区",
                        id: 3000,
                        type: 2,
                    }
                ]
            },
            {
                name: "北京123",
                id: 0300,
                type: 1,
            },
            {
                name: "北京123456",
                id: 0400,
                type: 1,
                children: [
                    {
                        name: "长阳区",
                        id: 2000,
                        type: 2,
                    },
                    {
                        name: "花式区",
                        id: 3000,
                        type: 2,
                    }
                ]
            },
            {
                name: "北京1223",
                id: 0500,
                type: 1,
            },
            {
                name: "北京12355",
                id: 0600,
                type: 1,
            },
            {
                name: "北京1222223",
                id: 0700,
                type: 1,
            },
        ]
    }
]


// 依据数据生成列表
function createLists(arr) {
    if (arr.length == 0) {
        return []
    }
    let arrlist = []
    let div = `<div class="item_cover"></div>
    `
    for (let i = 0; i < arr.length; i++) {
        if (arr[i].children) {
            var li = `
            <div class="cascader_item1" id=${arr[i].id} type=${arr[i].type}>
                ${arr[i].name}
                <i class="iconfont icon-right1 pos_i_sel"> </i>
            </div>
       `
        } else {
            var li = `
            <div class="cascader_item1" id=${arr[i].id} type=${arr[i].type}>
                ${arr[i].name}
               
            </div>
       `
        }

        arrlist.push(li)
    }
    // console.log(arrlist)
    let list = $(div).append(arrlist)
    return list
}


// 级联选择器 相关事件
// 显示第一级

let SelectIdArr = []  // 选中的 id列表

$(function () {
    let isCascader = false // 当前是否打开
    $(".common_select_cover").on("click", function (e) {
        e.stopPropagation()
        if (!isCascader) {
            // $(".cascader_main")
            $(".common_select_cover").addClass("cascader_active")
            isCascader = true
            // 渲染第一层
            if (SelectIdArr.length == 0) {
                let div_item = createLists(templateData)
                $(".drop_down_main_cover").append(div_item)
            }
            $(".drop_down_main_cover").show()
        } else {
            hideCascader()
            // $(".drop_down_main_cover").empty()
            // SelectIdArr = []
        }
    })

    // 关闭级联选择框 事件
    function hideCascader() {
        $(".common_select_cover").removeClass("cascader_active")
        isCascader = false
        $(".drop_down_main_cover").hide()
    }

    // 事件代理部分
    $(".drop_down_main_cover").on("click", function (e) {
        e.stopPropagation();
        e.preventDefault();

        let id = $(e.target).attr("id")
        let type = $(e.target).attr("type")
        let name = $(e.target).text().trim()
        if (!name) {
            // console.log($(e.target).prev())
            name = $(e.target).parent().text().trim()
            id = $(e.target).parent().attr("id")
            type = $(e.target).parent().attr("type")
            $(e.target).parent().addClass("cascader_avtive")
            $(e.target).parent().siblings().removeClass("cascader_avtive")
            $(e.target).parent().siblings().find("i").removeClass("cascader_avtive")
        }
        let obj = {
            id,
            type,
            name
        }

        // 添加对应选中的样式
        $(e.target).addClass("cascader_avtive")
        $(e.target).find("i").addClass("cascader_avtive")
        $(e.target).siblings().find("i").removeClass("cascader_avtive")
        $(e.target).siblings().removeClass("cascader_avtive")


        // 需要先判断 是否已经存在了当前级的
        // 如果存在 需要 将后面的type 全部 清空
        if (SelectIdArr.length != 0) {
            // 查看是否存在 type
            let obj1 = SelectIdArr.find(item => {
                return item.type == type
            })

            // console.log(obj1)

            if (obj1 != null) {
                let length = $(".item_cover").length
                // 这儿必须倒着删除
                for (let i = length; i > obj1.type; i--) {

                    $(".item_cover").eq(i).remove();
                }
                SelectIdArr = SelectIdArr.filter(item => { return item.type < obj1.type })
            }
        }
        SelectIdArr.push(obj)

        // console.log(SelectIdArr)
        // 循环拼接成字符串
        let str = ''
        SelectIdArr.forEach((item, index) => {
            if (index == SelectIdArr.length - 1) {
                str = str + item.name
            } else {
                str = str + item.name + " / "
            }

        })

        $(".cascader_main").html(str)
        // 去加载对应下级列表的数据
        // 通过id 和 type 找到对应项 取出 children 数据
        // console.log(id, type)
        let newdata = computedChildrenData(templateData, id, type)
        // console.log(newdata)
        if (newdata.children) {
            let div_item = createLists(newdata.children)
            // console.log(div_item)
            $(".drop_down_main_cover").append(div_item)
        } else {
            hideCascader()
        }
    })


})

// 清空列表
function clearCascader() {
    $(".common_select_cover").removeClass("cascader_active")
    isCascader = false
    $(".drop_down_main_cover").hide()
    SelectIdArr = []
    $(".drop_down_main_cover").empty()
    $(".cascader_main").html("请选择")
}

// 处理 级联选择框的关闭事件
// $("body")

let arr1 = []
// 处理 通过id 和 type 找到对应项 取出 children 数据 的函数
// 第一个 参数 是 templateData 及 相关 children
function computedChildrenData(arr, id, type) {
    for (let i = 0; i < arr.length; i++) {
        if (arr[i].id == id && arr[i].type == type) {
            // console.log(arr[i])
            // if(type==3){

            // }
            arr1 = arr[i]
            break

        } else if (arr[i].children) {
            computedChildrenData(arr[i].children, id, type)
        }
    }

    return arr1



}

// 数组深层去重 返回去重后的数组
function setArr(arr) {
    let hashTable = {};
    let newArr = [];
    for (let i = 0, l = arr.length; i < l; i++) {
        if (!hashTable[arr[i]]) {
            hashTable[arr[i]] = true;
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

// 查看新的项，是否已经存在 返回 true or false
function priceFilter(arr, obj) {
    let isFalse = true
    arr.forEach(item => {
        if (JSON.stringify(item) == JSON.stringify(obj)) {
            isFalse = false
        }
    })
    return isFalse
}




